<?php
try {
    $includeModels = array('BaseModel.class','Operacao.class');
    include('../../model/BaseModel.class.php');
    include('../../model/Operacao.class.php');
    	
    $auth = array(
    array('action'=> 'Desalocar', 'operacao'=>Operacao::CONTRATO_CADASTRAR_VAGASLOTACOES),
    array('action'=> 'Salvar', 'operacao'=>Operacao::CONTRATO_CADASTRAR_VAGASLOTACOES)
    );

    require_once '../../controller/controller.inc.php';

    $operacoes = array();
    $operacoes[0] = Operacao::CONTRATO_CADASTRAR_VAGASLOTACOES;
    $operacoes[1] = Operacao::CONTRATO_VISUALIZAR_VAGASLOTACOES;

    //		$usuario->isAuthorizedViewOperacao( $operacoes );
    FluxoContrato::isVisible($operacoes);

    # Classes para indicar a aba ativa
    $classeContratos = '';
    $classeVagas = '';
    $classeLotacoes = '';
    $classeSalarios = '';
    $classeVagasLotacoes = 'class="ativa"';
    $classeAditivos = '';
    $classeArquivos = '';

    $submitUrl = basename(__FILE__) . '?contratoid=' . $_GET['contratoid'];

    $objeto = new Vaga();
    $contrato = new Contrato( $_GET['contratoid'] );
     
    if (FluxoContrato::isEditable('vagaslotacoes', $contrato)) {
        $readOnly = '';
    }
    else {
        $readOnly = 'disabled="disabled"';
    }
    
    $contratoid = $contrato->contratoid;
     
    # Autorização
    if ( !$usuario->isContratoPermitido($_GET['contratoid'])){
        $_GET['contratoid'] = -1;
        throw new Exception('Voce não tem autorizacao para acessar esta pagina.');
    }
    
    $info = NULL;
    
    // mensagens aditivos contrato
    $motivos = array(MotivoAditivo::MOTIVO_QUANTIDADE);
    if ($contrato->isAditivo() AND !$contrato->hasMotivosAditivo($motivos)) {
        $info = 'Para alterar vagas x lotações desse aditivo, seus motivos devem conter o
           item quantidade';
    }
    
    $tabela = montarTabela();
     
    require( '../../controller/contratos/helper_situacao.php' );
     
    if (isset ($_POST["btnAcao"])) {
        
        $form = $_POST["btnAcao"];
        
        switch($form) {
            
            case "Salvar":
                
                if ($contrato->isBloqueado() == TRUE) {
                    throw new Exception(TMensagens::getContratoBloqueado());
                }
                
                $cargoIds = $contrato->getCargos();
                 
                if (!isset($cargoIds)) {
                    throw new Exception('Não é possível realizar esta operação,
                        pois este contrato não possui nenhuma vaga.');
                }
                
                if ($cargoIds && $_POST['ddlLotacaoID']) {

                    try {

                        pg_query(conexao::Conectar(), "begin");

                        // mensagem para se nao existir nenhuma modificacao
                        $modificado = 0;
                        foreach ($cargoIds as $id) {
                            if (isset($_POST["txtQuantidade_$id"])
                                AND $_POST["txtQuantidade_$id"] > 0) {
                                $modificado = 1;
                            }
                        }
                        if (!$modificado) {
                            throw new Exception("Não existem modificações");
                        }
                        
                        foreach ($cargoIds as $id) {
                            
                            if (isset($_POST["txtQuantidade_$id"]) AND
                                (!empty($_POST["txtQuantidade_$id"])
                                OR $_POST["txtQuantidade_$id"] == 0)) {
                                
                                $cargo = new Cargo($id);
                                $descricao = $cargo->descricao;
                                
                                $qtd = $_POST["txtQuantidade_$id"];
                                
                                // Não deixa inserir se não houver vagas suficientes
                                $sql = "SELECT count(*) as contagem
                                        FROM vaga
                                        WHERE cargoid = " . $id . "
                                            AND contratoid = " . $contrato->contratoid . "
                                            AND lotacaoid IS NULL";
                                $resultado = pg_fetch_object(TUtils::CriarResultSet($sql));
                                 
                                if (!(is_object($resultado)
                                      && $qtd <= $resultado->contagem)) {
                                    throw new Exception("Erro: Não há vagas disponíveis.
                                        Para o Cargo de $descricao.");
                                }
    
                                for ($j = 0; $j < $qtd; $j++) {
    
                                    $sql = "SELECT vagaid
                                            FROM vaga
                                            WHERE cargoid = " . $id . "
                                                AND contratoid = " .
                                                    $contrato->contratoid . "
                                                AND lotacaoid IS NULL LIMIT 1";
                                    
                                    $resultado = pg_fetch_object(TUtils::CriarResultSet($sql));
    
                                    if (is_object($resultado)
                                        AND isset($resultado->vagaid)) {
                                        $objeto = new Vaga();
                                        $objeto->vagaid = $resultado->vagaid;
                                        $objeto->cargoid = $id;
                                        $objeto->contratoid = $contrato->contratoid;
                                        $objeto->lotacaoid = $_POST['ddlLotacaoID'];
                                        $objeto->statusid = Status::Vaga_AContratar;
                                        $objeto->ativa = 'f';
                                        $objeto->alterar();
                                    }
                                }
                            }
                        }
                        
                        pg_query(conexao::Conectar(), "commit");
                        
                    }
                    catch (Exception $e) {
                        pg_query(conexao::Conectar(), "rollback");
                        throw new Exception($e->getMessage());
                    }
                }
                else {
                    throw new Exception('Por favor, selecione a lotação');
                }

                $message = 'alteracoes';
                header('Location: cadastrar.php?message=' . $message .
                       '&contratoid=' . $contrato->contratoid);

                break;
                 
            case 'Desalocar':

                if ( !isset( $_POST['txtQuantidade'] ) )
             			throw new Exception("Por favor, informe uma quantidade");
             			 
             			if ( !isset( $_POST['chkRegistro'] ) )
             			throw new Exception( TMensagens::getNenhumItemSelecionado() );

             			$ids = explode( '_', $_POST['chkRegistro'] );
             			 
             			if ( $ids[2] == 0 )
             			throw new Exception( "Não é possível desalocar este registro, pois ele já está sem lotação." );

             			if ( $ids[3] === 'ATIVA' )
             			throw new Exception( "Não é possível desalocar este registro, pois está ativo." );
             			 
             			$objeto = new Vaga();
             			$objeto->contratoid = $_GET['contratoid'];
             			$objeto->cargoid = $ids[1];
             			$objeto->lotacaoid = $ids[2];
             			$objeto->desalocarPorVagaLotacao( $_POST['txtQuantidade'] );
             			 
             			//Gravando historico
             			$carg = new Cargo($ids[1]);
             			$lot = new Lotacao($ids[2]);
             			//$contrato->observacao =  date('d/m/Y') . ' - ' . $usuario->usuario . ': Desalocar Cargo '.$carg->descricao.', Lotação  '.$lot->nome.' , '.$_POST['txtQuantidade'].' vaga(s). <br/>' . $contrato->observacao;
             			//$contrato->salvar();
             			 
             			$message = 'desalocacao';
             			header( 'Location: cadastrar.php?message=' . $message . '&contratoid=' . $contrato->contratoid);
             			 
             			break;
        }
    }
     
    if ( isset( $_GET['message'] ) ){
        switch ( $_GET['message'] ){
            case 'desalocacao':
                $sucesso = "Registros desalocados com sucesso.";
                break;
        }
    }

     
     
} catch(exception $e){
    $erro = $e->getMessage();
}


function montarTabela(){
     
    $sqlVagasPorCargo = 'SELECT distinct(c.cargoid) as id, c.descricao as nome,
                         v.contratoid
                         FROM cargos as c, vaga as v
                         WHERE c.cargoid = v.cargoid
                         AND v.contratoid=' . pg_escape_string($_GET['contratoid']) . '
                         AND v.lotacaoid IS NULL';
    $result = TUtils::CriarResultSet($sqlVagasPorCargo);
    $num = pg_num_rows($result);
    if ($num > 0){
        $html = 'Escolha os cargos e informe para cada um deles a quantidade de vagas que serão alocadas na lotação selecionada.
                      <br/><br/>
                      <table cellspacing="1" class="grid">';
        $html .= '<thead>';
        $html .= '<tr>';
        $html .= '<th>CARGO</th>';
        $html .= '<th>QUANTIDADE NÃO LOTADA</th>';
        $html .= '<th>QUANTIDADE PARA ALOCAÇÃO</th>';
        $html .= '</tr>';
        $html .= '</thead>';
        $html .= '<tbody>';
        for($i=0; $i < $num ; $i++)
        {
            $consulta = pg_fetch_object($result);
            $value = (isset($_POST["txtQuantidade_{$consulta->id}"]))? $_POST["txtQuantidade_{$consulta->id}"] : '';
            $selected = (!empty($_POST["txtQuantidade_{$consulta->id}"]))? 'CHECKED' : '';
            $html .= '<tr>';
             
            $sql = 'SELECT count(*) as total FROM vaga WHERE cargoid ='. $consulta->id .'AND contratoid ='. $consulta->contratoid .'AND lotacaoid IS NULL';
            $total = pg_fetch_object(TUtils::CriarResultSet($sql));
             
            $html .='<td>'.$consulta->nome.'</td>';
            $html .='<td>'.$total->total.'</td>';
            $html .='<td><input class="opcional" type="textbox" name="txtQuantidade_'.$consulta->id.'"  value="'.$value.'"/></td>';
             
            $html .= "</tr>";
        }
        $html .= '</tbody>';
        $html .= "</table>";
        	
        return $html;
    }
    else{
        return false;
    }
}
?>
